package com.tong.hao.ac.service.config;

import com.tong.hao.ac.service.intercept.AcHandlerInterceptor;
import org.springframework.context.annotation.Configuration;
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
import org.springframework.web.servlet.config.annotation.ResourceHandlerRegistry;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;

import javax.annotation.Resource;

/**
 * @ClassName WebMvcConfig
 * @Author 友野浩二
 * @Version 1.0
 * 解决静态资源路径【映射】问题
 * 映射：HTTP请求地址 ---> 静态资源的存放位置
 * 【注意】：不能继承WebMvcConfigurationSupport,否则会导致application.ymal中spring.jackson.date-format配置不生效。
 *           原因：继承 WebMvcConfigurationSupport 后会覆盖 @EnableAutoConfiguration关于WebMvcAutoConfiguration的配置。
 */
@Configuration
public class AcWebMvcConfig implements WebMvcConfigurer {

    /**
     * @return void
     * @Author 友野浩二
     * @Description // 配置静态资源访问路径,避免静态资源请求被拦截；防止@EnableMvc把默认的静态资源路径覆盖了,手动设置的方式
     * @Param [registry]
     **/
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        // 解决静态资源无法访问
        // 将所有/static/** 访问都映射到classpath:/static/ 目录下
        registry.addResourceHandler("/static/**").addResourceLocations("classpath:/static/");
        registry.addResourceHandler("/templates/**").addResourceLocations("classpath:/templates/");
        // 解决swagger无法访问(将对springfox-swagger-ui.jar/META-INF/resources/swagger-ui.html的请求指向了META-INF/resources/目录)
        registry.addResourceHandler("/swagger-ui.html").addResourceLocations("classpath:/META-INF/resources/");
        // 解决swagger的js文件无法访问
        registry.addResourceHandler("/webjars/**").addResourceLocations("classpath:/META-INF/resources/webjars/");
    }

    /**
     * 登录拦截器
     */
    @Resource
    private AcHandlerInterceptor acHandlerInterceptor;

    @Override
    public void addInterceptors(InterceptorRegistry registry) {
        // 注册拦截器,添加拦截路径 和 排除拦截路径
        // 多个拦截器时,以此添加执行顺序按添加顺序
        registry.addInterceptor(acHandlerInterceptor).addPathPatterns("/**");
    }
}
